package th.retrofit.lib;

import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * https://leetcode-cn.com/problems/group-anagrams/
 * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 *
 * 字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母都恰好只用一次。
 *
 */
public class Solution49 {

    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> groupMap = new HashMap<>();
        for (String str : strs) {
            char[] cArr = str.toCharArray();
            Arrays.sort(cArr);
            String newStr = String.valueOf(cArr);
            groupMap.putIfAbsent(newStr, new LinkedList<>());
            groupMap.get(newStr).add(str);
        }
        List<List<String>> results = new LinkedList<>();
        for (Map.Entry<String, List<String>> entry : groupMap.entrySet()) {
            results.add(entry.getValue());
        }
        return results;
    }

    public static void main(String[] args) {
        String[] arr = new String[]{"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> results = new Solution49().groupAnagrams(arr);
        for (List<String> list : results) {
            for (int i = 0; i < list.size(); i++) {
                System.out.print(list.get(i));
                if (i != list.size() - 1) {
                    System.out.print(",");
                } else {
                    System.out.println();
                }
            }
        }
    }

}
